package com.atguigu.gmall.activity.controller;

import com.atguigu.gmall.activity.service.CouponInfoService;
import com.atguigu.gmall.common.result.Result;
import com.atguigu.gmall.model.activity.CouponInfo;
import com.atguigu.gmall.model.activity.CouponRuleVo;
import com.atguigu.gmall.model.enums.CouponType;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 * @author atguigu-mqx
 */
@RestController
@RequestMapping("/admin/activity/couponInfo")
public class CouponInfoController {

    //  需要调用服务层
    @Autowired
    private CouponInfoService couponInfoService;

    //  http://localhost/admin/activity/couponInfo/1/10
    @GetMapping ("{page}/{limit}")
    public Result getIndex(@PathVariable Long page,
                           @PathVariable Long limit){

        Page<CouponInfo> couponInfoPage = new Page<>(page,limit);

        //  调用服务层方法
        IPage<CouponInfo> infoServicePage = couponInfoService.getPage(couponInfoPage);

        //  返回数据
        return Result.ok(infoServicePage);
    }

    //  添加购物券：
    //  http://localhost/admin/activity/couponInfo/save
    @PostMapping("save")
    public Result save(@RequestBody CouponInfo couponInfo){
        //  调用服务层方法
        couponInfoService.save(couponInfo);
        //  返回
        return Result.ok();
    }

    //  单个删除方法
    //  http://localhost/admin/activity/couponInfo/remove/3
    @DeleteMapping("remove/{id}")
    public Result remove(@PathVariable Long id){

        //  调用服务层方法
        couponInfoService.removeById(id);
        return Result.ok();
    }

    //  批量删除方法
    //  http://localhost/admin/activity/couponInfo/batchRemove
    @DeleteMapping("batchRemove")
    public Result batchRemove(@RequestBody List<Long> idList){
        //  调用服务层方法
        couponInfoService.removeByIds(idList);
        return Result.ok();
    }

    //  编辑操作：根据Id 获取到优惠券的数据并回显！
    //  http://localhost/admin/activity/couponInfo/get/3
    @GetMapping("get/{id}")
    public Result getById(@PathVariable Long id){
        //  调用服务层方法
        CouponInfo couponInfo = couponInfoService.getById(id);
        //  赋值优惠券类型显示
        couponInfo.setCouponTypeString(CouponType.getNameByType(couponInfo.getCouponType()));
        //  返回数据
        return Result.ok(couponInfo);
    }

    //  编辑之后的保存控制器
    //  http://localhost/admin/activity/couponInfo/update
    @PutMapping("update")
    public Result update(@RequestBody CouponInfo couponInfo){
        //  调用服务层方法
        couponInfoService.updateById(couponInfo);
        return Result.ok();
    }

    //  http://localhost/admin/activity/couponInfo/saveCouponRule
    //  将前端传递的数据转为java 对象
    @PostMapping("saveCouponRule")
    public Result saveCouponRule(@RequestBody CouponRuleVo couponRuleVo){
        //  调用服务层方法
        couponInfoService.saveCouponRule(couponRuleVo);
        return Result.ok();
    }

    //  回显优惠券的使用范围的控制器
    //  http://localhost/admin/activity/couponInfo/findCouponRuleList/7
    @GetMapping("findCouponRuleList/{id}")
    public Result findCouponRuleList(@PathVariable Long id ){
        // 调用服务层方法 : 返回map 的原因是： 需要将页面渲染的数据的都统一放一个map 中：
        //  map.put(key,value) key = spu value = spuInfoList
        //  map.put(key,value) key = category value = category3List
        //  map.put(key,value) key = tm value = tmList
        Map<String,Object> map = couponInfoService.findCouponRuleList(id);
        return Result.ok(map);
    }

    //  http://localhost/admin/activity/couponInfo/findCouponByKeyword/t01
    //  根据优惠券的名称来获取到优惠券列表
    @GetMapping("findCouponByKeyword/{keyword}")
    public Result findCouponByKeyword(@PathVariable String keyword){
        //  调用服务层方法
        List<CouponInfo> couponInfoList = couponInfoService.findCouponByKeyword(keyword);
        return Result.ok(couponInfoList);
    }
}
